public with sharing class GettingStartedController {

    public Survey__c testSurvey { get; set; }
    public Boolean testSurveyAvailable { get; set; }
    public List<String> questionIds { get; set; }
    public Message pageMessage {
        get {
            if (pageMessage == null) {
                pageMessage = new Message();
            }
            return pageMessage;
        }
        set;
    }

    public GettingStartedController() {
        // make sure getting started survey doesn't already exist
        questionIds = new List<String>();
        try {
            testSurvey = [select Id, Name From Survey__c where Name = 'SurveyForce Sample Survey' LIMIT 1];
            testSurveyAvailable = true;
        } catch (Exception e) {
            testSurveyAvailable = false;
        }
    }

    public void makeTestSurvey() {
        try {
            testSurvey = new Survey__c();
            testSurvey.Name = 'SurveyForce Sample Survey';
            testSurvey.Submit_Response__c = 'empty';
            testSurvey.Survey_Container_CSS__c = '#survey_container{ margin: 0 auto; width: 600px; box-shadow: 0 0 14px #CCCCCC; -moz-box-shadow: 0 0 14px #CCCCCC; -webkit-box-shadow: 0 0 14px #CCCCCC; }';
            insert testSurvey;

            questionIds.add(createQuestion(0));
            questionIds.add(createQuestion(1));
            questionIds.add(createQuestion(2));
            questionIds.add(createQuestion(3));

            createResponses();

            testSurveyAvailable = true;


            pageMessage.setMessage('Sample survey was successfully created!', 'success');
        } catch (Exception e) {
            testSurveyAvailable = false;

            pageMessage.setMessage(e.getMessage(), 'error');
            ApexPages.addMessages(e);
        }
    }

    public PageReference viewSurvey() {
        return new PageReference(Page.SurveyManagerPage.getUrl() + '?id=' + testSurvey.Id);

    }

    public PageReference takeSurvey() {
        return new PageReference(Page.TakeSurvey.getUrl() + '?id=' + testSurvey.Id + '&cId=none&caId=none');
    }
/*
public PageReference viewResults()
{
    ReportFinderUtil rfu = new ReportFinderUtil();
    String reportId = rfu.findReportId('Survey with Questions and Responses');  
    
    String surveyId = testSurvey.Id;
    surveyId = surveyId.substring(0,15);
    
    return new PageReference('/' + reportId + '?pv0=' + surveyId);
}
*/
    private String createQuestion(Integer i) {
        Survey_Question__c q = new Survey_Question__c();
        q.Name = 'Testing Question';
        q.Survey__c = testSurvey.Id;
        q.Type__c = getType(i);
        q.Choices__c = getChoices(i);
        q.Question__c = 'Testing Question question' + i;
        q.OrderNumber__c = i;
        q.Required__c = true;
        insert q;
        return q.id;
    }

    private String getType(Integer i) {
        if (i == 1)
            return 'Multi-Select--Vertical'; else if (i == 2)
            return 'Single Select--Vertical'; else if (i == 3)
            return 'Free Text'; else
                return 'Single Select--Horizontal';
    }
    private String getChoices(Integer i) {
        if (i == 0)
            return 'one\ntwo\nthree\n';
        if (i == 1)
            return 'four\nfive\nsix\n';
        if (i == 2)
            return 'seven\neight\nnine\n';


        return '';
    }

    private void createResponses() {
        Contact c = new Contact();
        try {
            c = [Select Id From Contact where Email = :'surveyForceAppUser@survey.force'];
        } catch (Exception e) {
            c.LastName = 'Doe';
            c.FirstName = 'Jane';
            c.Email = 'surveyForceAppUser@survey.force';
            insert c;
        }

        SurveyTaker__c st = new SurveyTaker__c();
        st.Contact__c = c.Id;
        st.Survey__c = testSurvey.Id;
        st.Taken__c = 'false';
        insert st;

        for (Integer i = 0; i < 4; i++) {
            SurveyQuestionResponse__c r = new SurveyQuestionResponse__c();
            if (i == 0) {
                r.Response__c = 'two';
            } else if (i == 1) {
                r.Response__c = 'four';
            } else if (i == 2) {
                r.Response__c = 'nine';
            } else {
                r.Response__c = 'This is a response.';
            }
            Survey_Question__c sq = [Select id from Survey_Question__c where id = :questionIds[i] limit 1];
            r.Survey_Question__c = sq.id;
            r.SurveyTaker__c = st.Id;
            insert r;
        }

    }
}